
//===== 公共属性
	var url = "interface.php";	//设置接口请求页面
	var city_xian = "柳河";


	//初始化省市县类别
	if(!sessionStorage.info_city_xian){
		sessionStorage.info_city_xian = '柳河县';
	}


	
	//临时设置顶部广告位
	function Set_Advert_Top(){
		var Advert_Top = '';
			Advert_Top +="<div style='flex:1'>";
				Advert_Top +="<div style='font:italic bold 15px/40px normal;color:green'>柳河便民信息平台</div>";
				Advert_Top +="<div style='color:#8bf;font-size:12px'>http://liuhe.bmxx8.top</div>";
			Advert_Top +="</div>";
			Advert_Top +="<div style='flex:1;font:normal normal 12px/22px normal;text-align:center'>";
				Advert_Top +="<div style='color:#8ac'>一键发布，覆盖全县!</div>";
				Advert_Top +="<div style='color:#ac8'>随时随地，发布查询!</div>";
				Advert_Top +="<div style='color:#c8a'>快捷方便，完全免费!</div>";
			Advert_Top +="</div>";
		$("#Advert_Top").html(Advert_Top);
	}





//===== 后台相关功能 

/*
	### 检测后台管的cookie是否登陆状态,失败则跳转到登陆页面
		示例：
			Check_After_User_Cookie();	//检测登陆状态
*/
function Check_After_User_Cookie(){
	if(!GetUid('after_user') || GetUid('after_user') == 'err'){
		location.replace('after_login.html');
		exit;
	}
}










//===== 公共函数

function al(res){
	alert(res);
}
function dc(res){
	document.write(res);
}



//确认操作及验证操作码,失败则exit停止后续操作
function confirm_prompt(){
	if(!confirm('确认该操作?')){
		exit;
	}else{
		var p1 = prompt('输入操作码：');
		if(p1 != '123'){
			alert('操作码不正确！');
			exit;
		}
	}
}




//设置页面title
function Set_Title(){
	$("title").text('我爱我家便民信息服务');
}


//后台管理退出登陆
function After_Admin_Exit(){
	var type = 'admin_exit';
	Token(type,function(token){
		$.ajax({
			url:url,
			type:'post',
			data:{
				token:token,
				type:type
			},
			success(res){
				sessionStorage.clear();
				location.replace('after_login.html');
			}
		});
	});
}



















//加载后台设置页中的功能选择
function After_Fun_Select(){
	var after_fun_select_str = '';
		after_fun_select_str += "功能选择：";
		after_fun_select_str += "<select>";
		after_fun_select_str += "<option value='after_set_user'>后台成员管理</option>";
		after_fun_select_str += "<option value='after_set_group'>后台分组管理</option>";
		after_fun_select_str += "<option value='after_set_fun'>权限功能管理</option>";
		after_fun_select_str += "<option value='after_set_service_type'>服务分类管理</option>";
		//after_fun_select_str += "<option value='after_set_close'>封禁理由管理</option>";
		after_fun_select_str += "<option value='after_set_keyword'>关键字管理</option>";
		after_fun_select_str += "</select>";
	$("#after_fun_select").html(after_fun_select_str);
	if(sessionStorage.after_set_select){
		$("#after_fun_select select").find('option').each(function(i,o){
			if($(o).val() == sessionStorage.after_set_select){
				$(o).attr('selected',true);
			}
		});
	}else{
		sessionStorage.after_set_select = 'user_con';
	}
	var val = sessionStorage.after_set_select;
	if(!location.pathname.match(val)){
		After_Fun_Select_Jump(val);
	}
	$("#after_fun_select select").change(function(){
		var val = $(this).find("option:selected").val();
		sessionStorage.after_set_select = val;
		After_Fun_Select_Jump(val);
	});
}
function After_Fun_Select_Jump(val){
	sessionStorage.removeItem('after_set_close_pnow');
	sessionStorage.removeItem('after_set_keyword_pnow');
	switch(val){
		case 'after_set_user': 
			location.href='after_set_user.html';
			break;
		case 'after_set_group': 
			location.href='after_set_group.html';
			break;
		case 'after_set_fun': 
			location.href='after_set_fun.html';
			break;
		case 'after_set_service_type': 
			location.href='after_set_service_type.html';
			break;
		//case 'after_set_close': 
			//location.href='after_set_close.html';
			//break;
		case 'after_set_keyword': 
			location.href='after_set_keyword.html';
			break;
	}
}







//查看信息详情
function Info_Cat(iid,type){
	location.href='detail.html?iid='+iid+'&type='+type+'&r='+Math.random();
}












/*
	### 将时间戳转换成 年月日格式的字串 
	### 参一：stamp js时间戳 
		参二：stat无值反回年月日，有值返回年月日时分秒
	### return : 返回年月日格式的字串
	### 示例：
		var t2 = StampToYmd(server_time);	//2018-5-15
*/
function StampToYmd(stamp,stat){
	var t = new Date(stamp);
	var t2 = t.getFullYear()+"-"+(t.getMonth()+1)+"-"+t.getDate();
	if(stat){
		var t3 = t2+' '+(t.getHours()>10?t.getHours():'0'+t.getHours())+':'+(t.getMinutes()>10?t.getMinutes():'0'+t.getMinutes())+':'+(t.getMinutes()>10?t.getMinutes():'0'+t.getMinutes());
		return t3;
	}else{
		return t2;
	}
}








/*
	### 检测并替换字串中的特殊字符为实体字符 (' , " , > , < , / , \)
	### 参一：源字串 
	### 参二：是否反解析，默认空为特殊字符转实体
	### return : 返回替换后的字串
	### 示例：
		var content = $('textarea[name=content]').val().trim();
		content = ChangeChar(content);
		或
		ChangeChar(obj.info_title,1)
*/
function ChangeChar(val,stat){
	if(stat){
		var p1 = /&#60/g;
		val = val.replace(p1,"<");
		var p2 = /&#62/g;
		val = val.replace(p2,">");
		var p2 = /&#39/g;
		val = val.replace(p2,"'");
		var p2 = /&#34/g;
		val = val.replace(p2,'"');
		var p2 = /&#47/g;
		val = val.replace(p2,"\/");
		var p2 = /&#92/g;
		val = val.replace(p2,"\\");
		return val;
	}else{
		var p1 = /</g;
		val = val.replace(p1,"&#60");
		var p2 = />/g;
		val = val.replace(p2,"&#62");
		var p2 = /'/g;
		val = val.replace(p2,"&#39");
		var p2 = /"/g;
		val = val.replace(p2,"&#34");
		var p2 = /\//g;
		val = val.replace(p2,"&#47");
		var p2 = /\\/g;
		val = val.replace(p2,"&#92");
		return val;
	}
}









/*
	### 蒙板提示框(提示时页面被盖不可操作)
	### 参一：提示内容
	### 需要：函数需要一个 id='notice' 的元素做容器
	### 示例：
		 <div id='notice'></div>
		 notice('信息发布成功！'); //开启提示框
		 notice();	//关闭提示框
*/
function notice(text){
	if(text){
		var str = "<div style='z-index:100;position:fixed;top:0px;width:100%;height:100%;background:rgba(255,100,100,0.5)'><div id='notice_text' style='background:#fff;width:200px;margin:20% auto;text-align:center;padding:30px'>"+text+"</div></div>";
		$('#notice').html(str);
	}else{
		$("#notice").html('');		
	}
}
















/*
	### 获取token
	### 参一：类别名称
	### 参二：成功后的回调
	### 示例：
		var type='submit';
		Token(type,function(token){
			alert(token);
		})
*/
function Token(type,fun){
	$.ajax({
		url:'interface.php',
		type:'post',
		async:false,
		data:{
			type:'token',
			token_name:type
		},
		success(token){
			fun(token);
		}
	});
}











/*
	### 获取当前页面url中指定参数的值
	### 参一：要获取的参数名
	### return: 成功：返回参数名对应的值，失败返回 err
	### 示例：
		当前页面URL: http://www.t1.top:81/t1/aa.php?a=aaa&b=bbb
		var keyword = 'a';
		alert(GetUrlParm(keyword));		//结果： aaa
*/
function GetUrlParm(key){	
	var p = '/'+key+'=([^&]*)?/';
	if(res = location.href.match(eval(p))){
		return res[1];
	}else{
		return 'err';
	}
}








/*
	### 获取cookie中指定字段的值(如获取用户登陆后的uid)
		参一：想要获取的字段名 如：uid
		return: 
			成功 	反回获取的值
			失败 	反回 'err'
		示例：
			alert( document.cookie);
*/
function GetUid(key){
	var p = '/'+key+'=([^;]*)?/';
	var res = document.cookie.match(eval(p));
	if(res && res[1]){
		return res[1];
	}else{
		return 'err';
	}
}





//判断用户登陆状态，uid小于1就跳到登陆页页面
function Check_Login(){
	if(GetUid('uid') == 'err'){
		location.href='login.html';
	}
}




//加载底部导航栏
function Load_NavBottom(type){

	switch(type){
		case 'before':
			var url = './Template/before_nav_bottom.html';break;

		case 'after':
			var url = './Template/after_nav_bottom.html';break;
	}	
	$.ajax({
		url:url,
		type:'post',
		success:function(res){
			$('#Nav_Bottom').html(res);
		}
	});
}















/*
	### 解析服务列表json数据并遍历添加到select元素内
	### 参一：json字串数据
	### 参二：要遍历添加到元素中的id名
	### 示例
			ParseServiceListOrInsert(res,'#service_list');
*/
function ParseServiceListOrInsert(res,ele){
	if(/^\[.*\]$/.test(res)){
		var service_list = JSON.parse(res);
		$(ele).append("");
		for(var item in service_list){
			var tmp = service_list[item];
			$(ele).append("<option value='"+tmp[0]+"'>"+tmp[1]+"</option>");
		}
	}else{
		alert('获取服务列表失败');
		exit;
	}
}




/*
	### 从后台获取服务列表的json数据
	### 参一：向interface页面请求的type值，也是token名，
	### 参二：请求的回调函数 (参一：数据，参二：状态，参三：服务器时间等相关信息)
	### 示例
		GetServiceListData('GetServiceList',function(res,a,b){
			//解析服务列表json数据并遍历添加到select元素内
			ParseServiceListOrInsert(res,'#service_list');
		});
*/
function GetServiceListData(type,fun){
	Token(type,function(token){
		$.ajax({
			url:'interface.php',
			async:false,
			type:'post',
			data:{
				type:type,
				token:token
			},
			success:function(res,a,b){
				fun(res,a,b);
			}
		});
	})

}




/*
	### 从sess,远程缓存，后台获取服务类型列表数据
		参一：获取成功的回调
		注：没有返回值，获取成功后会将服务列表数据缓存 到本地sessionStorage.service_type.
*/

function GetServiceList(fun){
	if(!sessionStorage.service_type){ 	//如果没有本地sess缓存则从远程缓存或后台获取数据
		var query_type = 'GetServiceList';
		$.ajax({
			url:'./Cache/'+query_type,
			async:false,
			type:'post',
			success(res){
				//判断缓存数据格式是否正确
				if(!/^\[.+\]$/.test(res)){
					//缓存失效了就重新加载并sess缓存
					GetServiceListData(query_type,function(res){
						if(!/^\[.+\]$/.test(res)){
							fun('err');
						}else{
							sessionStorage.service_type = res;
							fun(sessionStorage.service_type);
						}
					});
				}else{ //如果远程缓存有效则进行sess缓存并解析
					sessionStorage.service_type = res;
					fun(sessionStorage.service_type);
				}
			},
			error(){
				//没有缓存则加载并进行缓存
				GetServiceListData(query_type,function(res){
					if(!/^\[.+\]$/.test(res)){
						fun('err');
					}else{
						sessionStorage.service_type = res;
						fun(sessionStorage.service_type);
					}
				});
			}
		});
	}else{
		if(fun){
			fun(sessionStorage.service_type);
		}
	}
}










/*
	### 根据服务id获取对应的服务名称
		参一：服务类型json数据集合
		参二：服务类型id
		返回：服务类型id对应的服务名

*/
function Get_ServiceType_Name(service_type,service_id){
	for(var s in service_type){
		if(service_type[s][0] == service_id){
			return service_type[s][1];
		}
	}
}
















/*
	### ajax传送文件或数据
	### 参一：数据formData 
	### 参二：提交的目标url
	### 参三：提交方式 get或post
	### 参四：回调函数
	### 示例
	  var formData = new FormData();
	  formData.append('file'+i,files[i]); //添加文件
	  formData.append('info','aa222aaa'); //添加信息
	  ajax(formData,'b.php','POST',function(res){
		alert(res);
	  });
*/
function ajax(formData,url,type,fun){
  if(window.XMLHttpRequest){
	var ajax=new XMLHttpRequest();
  }else{
	var ajax=new ActiveXObject("Microsoft.XMLHTTP");
  }
  ajax.open(type,url,true);  //true为异步,false 为同步
  ajax.send(formData);  //发送数据
  ajax.onreadystatechange=function(){ //监听状态
  	if(ajax.readyState==4 && ajax.status == 200){
  	  fun(ajax.responseText);
  	}
  }
}	









/*
	### 检测文件是否合法(大小，后缀) 
		参一：文件对象(必选)
		参二：文件大小(可选，默认500Kb)
		参三：文件后缀(可选，默认jpg,png,gif)
		return: 
			e1	文件类型不正确（参三使用默认时会检测文件类型)
			e2	文件大小超限
			e3	文件后缀不合法
			true 	通过检测返回true
		示例：
			img_select.onchange=function(){
				var file = img_select.files[0];
				alert(CheckFile(file,50000,['txt','zip']));
			}
*/
function CheckFile(file,size,file_exts){
	if(!size){
		var size = 5000000;
	}
	if(!file_exts){
		var file_types = ['image/gif','image/jpeg','image/png'];	//文件类型过滤
		var file_exts = ['gif','GIF','jpeg','JPEG','jpg','JPG','png','PNG'];	//文件后缀过滤
		if(file_types.indexOf(file.type) < 0){
			return 'e1';
		}
	}
	if(file.size > size){
		return 'e2';
	}
	var ext = file.name.substring(file.name.lastIndexOf('.')+1);
	if(file_exts.indexOf(ext) < 0){
		return 'e3';
	}
	return true;
}










/*
    ### 设置分页码
        参一：总页数
        参二：当前页数
        参三：是否携带其它url参数
        需要一个id为 fpage 的容器元素 如 <div style="text-align:center;margin:20px" id="fpage"> </div>
        示例：
			Fpage(info.PageCount, info.PageNo,function(pnow){
				sessionStorage.after_record_info_pnow = pnow;
				Get_User_info(uid);
			});
*/
function Fpage(PageCount, PageNo,fun) {
	PageNo = parseInt(PageNo);
	PageCount = parseInt(PageCount);
	var fpage_size = 2;
    var start = PageNo - fpage_size;
    if (start < 1) {
        start = 1;
    }
    var end = PageNo + fpage_size;
    if (end > PageCount) {
        end = PageCount;
    }
    var fpage_str = '';
    if(PageNo != 1 && PageCount > 3){
    	fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo='1' >首页</a>";
    }
/*    if (PageNo > 1) {
        var last = PageNo - 1 > 0 ? PageNo - 1 : 1;
        fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo=" + last + ">上页</a>";
    }*/
    for (var i = start; i <= end; i++) {
        if (PageNo == i) {
            fpage_str += "<a style='margin:5px;border:1px solid blue;padding:3px 5px;color:#fff;background:blue' PageNo=" + i + ">" + i + "</a>";
        } else {
            fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo=" + i + ">" + i + "</a>";
        }
    }
/*    if (PageNo < PageCount) {
        var next = PageNo + 1 < PageCount ? PageNo + 1 : PageCount;
        fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo=" + next + ">下页</a>";
    }
    */
    if(PageNo != PageCount){
    	fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo=" + PageCount + ">尾页</a>";
    }
    $("#fpage").html(fpage_str);
    $("#fpage a").click(function () {
    	if(PageNo == $(this).attr('PageNo')){
    		return;
    	}
        PageNo = $(this).attr('PageNo');
        fun(PageNo);
    });
}





/*
    ### 设置分页码(无总页，效率分页*推荐*)
        参一：当前页
        参二：成功的回调函数
        参三：是否携带其它url参数
        需要一个id为 fpage 的容器元素 如 <div style="text-align:center;margin:20px" id="fpage"> </div>
        示例：
			Fpage(info.PageNo,function(pnow){
				sessionStorage.after_record_info_pnow = pnow;
				Get_User_info(uid);
			});
*/
function Fpage3(PageNo,fun,step) {
	if(!step){
		step = 1;
	}
	PageNo = parseInt(PageNo);
	var fpage_size = 2;
    var start = PageNo - fpage_size;
    if (start < 1) {
        start = 1;
    }
    var end = PageNo + step;
    var fpage_str = '';
   	fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo='1' >首页</a>";
    for (var i = start; i <= end; i++) {
        if (PageNo == i) {
            fpage_str += "<a style='margin:5px;border:1px solid blue;padding:3px 5px;color:#fff;background:blue' PageNo=" + i + ">" + i + "</a>";
        } else {
            fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo=" + i + ">" + i + "</a>";
        }
    }
    $("#fpage").html(fpage_str);
    $("#fpage a").click(function () {
    	if(PageNo == $(this).attr('PageNo')){
    		return;
    	}
        PageNo = $(this).attr('PageNo');
        fun(PageNo);
    });
}






/*
    ### 无限分页最新(无总页，效率分页*推荐*)
        参一：当前页
        参二：允许显示最大页码
        参三：成功的回调函数
        参四：后续要查询的分页数 (对应后台 $max_page)
        参五：分页码循环的步长
        需要一个id为 fpage 的容器元素 如 <div style="text-align:center;margin:20px" id="fpage"> </div>
        示例：
			Fpage4(info.pnow,info.max_page,function(pnow){
				sessionStorage.after_record_info_pnow = pnow;
				Get_User_info();
			},60,3); //往后续查60页，当前页前后各显示3条
*/
function Fpage4(PageNo,max_page,fun,step,loop) {
	if(!loop){
		loop=2;
	}
	if(!step){
		step=6;
	}
	PageNo = parseInt(PageNo);
    var start = PageNo - loop;
    if (start < 1) {
        start = 1;
    }
    var end = PageNo + loop;
    if(end > max_page){
    	end = max_page;
    }
    var fpage_str = '';
   	fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo='1' >首页</a>";
    for (var i = start; i <= end; i++) {
        if (PageNo == i) {
            fpage_str += "<a style='margin:5px;border:1px solid blue;padding:3px 5px;color:#fff;background:blue' PageNo=" + i + ">" + i + "</a>";
        } else {
            fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo=" + i + ">" + i + "</a>";
        }
    }
    var next = PageNo + step;
    if(next >= max_page){
    	next = max_page
    }
   	fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo="+next+" >>></a>";
    $("#fpage").html(fpage_str);
    $("#fpage a").click(function () {
    	if(PageNo == $(this).attr('PageNo')){
    		return;
    	}
        PageNo = $(this).attr('PageNo');
        fun(PageNo);
    });
}






/*
    ### 设置分页码，无最后页大数据量高性能分页
        参一：当前页
        参二：当前页前置页码数量
        参三：成功后的回调函数,回调时会将当前页码传入
        注：需要一个id为 fpage 的容器元素 如 <div style="text-align:center;margin:20px" id="fpage"> </div>
        示例：
			Fpage_NoEnd(sessionStorage.after_user_pnow,3,function(pnow){
				sessionStorage.after_user_pnow = pnow;
				Get_User_List();
			});
*/
function Fpage_NoEnd(pnow,pview,fun) {
	PageNo = parseInt(pnow);
    var start = PageNo - pview;
    if (start < 1) {
        start = 1;
    }
    var end = PageNo + 1;

    var fpage_str = '';
    if(PageNo > 3){
    	fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo='1' >首页</a>";
    }

    for (var i = start; i <= end; i++) {
        if (PageNo == i) {
            fpage_str += "<a style='margin:5px;border:1px solid blue;padding:3px 5px;color:#fff;background:blue' PageNo=" + i + ">" + i + "</a>";
        } else {
            fpage_str += "<a style='margin:5px;border:1px solid;padding:3px 5px;color:#aaa' PageNo=" + i + ">" + i + "</a>";
        }
    }


    $("#fpage").html(fpage_str);
    $("#fpage a").click(function () {
    	if(PageNo == $(this).attr('PageNo')){
    		return;
    	}
        PageNo = $(this).attr('PageNo');
        fun(PageNo);
    });
}










/*
	### 刷新无限分页数据
		参一：成功后的回调
		示例：
			//页面中需要一个id为Refresh_Infinite_Fpage_Data 的元素
			<span id='Refresh_Infinite_Fpage_Data'></span>  
			
			//调用刷新函数回调后并重新获取数据及重置当前页
			Refresh_Infinite_Fpage_Data(function(){
				sessionStorage.after_record_info_pnow = 1;
				Get_User_info();	//获取用户发布记录
			});
*/
function Refresh_Infinite_Fpage_Data(fun){
	$('#Refresh_Infinite_Fpage_Data').html("<button style='float:right'>刷新</button>");
	$('#Refresh_Infinite_Fpage_Data button').click(function(){
		var type = 'Refresh_Infinite_Fpage_Data_Sess';
		Token(type,function(t){
			$.ajax({
				url:url,
				type:'post',
				data:{
					token:t,
					type:type,
				},
				success(res){
					fun();
				}
			});
		});	
	});
}









/*
	### 检验当前用户的权限
		参一：权限名
		参二：验证成功的回调 成功返回res为ok
		示例：
			var priv_name = 'after_user.html';
			Priv_Check(priv_name,function(res){
				if(res != 'ok'){
					alert('没有权限!');
					location.href = document.referrer;
					exit;
				}
			});
*/
function Priv_Check(priv_name,fun){
	var type = 'Priv_Check';
	Token(type,function(t){
		$.ajax({
			url:url,
			type:'post',
			async:false,
			data:{
				token:t,
				type:type,
				priv_name:priv_name
			},
			success(res){
				fun(res);
			}
		});
	});
}
